package com.study.spark.scala.sql

import org.apache.spark.sql.SparkSession

/**
 * SQL 聚合函数
 *
 * @author stephen
 * @date 2019-09-27 17:39
 */
object AggregationFunctionDemo {

  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder()
      .appName("AggregationFunctionDemo")
      .master("local[*]")
      .getOrCreate()

    // 隐式转换
    import org.apache.spark.sql.functions._

    // 聚合函数
    spark.range(1, 10).createOrReplaceTempView("tmp")

    spark.sql("select id, id*2 as double_id from tmp")
      .select(
        avg("id"), // 平均值
        variance("id"), // 方差/标准差
        skewness("id"), // 偏差
        kurtosis("id"), // 峰度
        corr("id", "double_id") // 皮尔逊系数
      ).show()

    spark.sql("select id%3 as id from tmp")
      .select(
        count("id"), // 计数
        countDistinct("id"), // 去重计数
        sum("id"), // 求和
        sumDistinct("id") // 去重求和
      ).show

    spark.sql("select id%3 as id from tmp")
      .select(
        collect_set("id"), // 去重
        collect_list("id"), // 非去重
        sort_array(collect_list("id"),false) // 非去重 降序
      ).show(false)

    // 集合函数



    spark.stop()


  }
}
